/**
  @file     	DESIGNPATTERN_SimpleFactory.h 
  @brief    	Define an interface for creating an object, and the package object is created
  @author  	arvin
  @version 	1.0   2012/12/13
 */

#ifndef CXX_DESIGNPATTERN_SIMPLEFACTORY_H
#define CXX_DESIGNPATTERN_SIMPLEFACTORY_H
#include "Profession.h"

class Profession;

class SimpleFactory
{
public:
	/**
	* Destruction
	*
	* @param VOID
	* @return 
	*/
	~SimpleFactory();

	/**
	* Instance
	*
	* @param VOID
	* @return SimpleFactory*
	* @note singleton
	*/
	static SimpleFactory* Instance();
	
	/**
	* Destroy
	*
	* @param VOID
	* @return VOID
	* @note singleton
	*/
	static VOID Destroy();

	/**
	* Create Profession
	*
	* @param PROFESSION_TYPE eProfession
	* @return Profession* 
	* @note Profession Type to identify the creating
	*/
	Profession* CreateProfession(PROFESSION_TYPE eProfession);
protected:
private:
	/**
	* Construction
	*
	* @param VOID
	* @return 
	*/
	SimpleFactory();

	/**
	* Copy Construction
	*
	* @param const SimpleFactory& cSimpleFactory
	* @return 
	*/
	SimpleFactory(const SimpleFactory& cSimpleFactory);

	/**
	* Assignment
	*
	* @param const SimpleFactory& cSimpleFactory
	* @return SimpleFactory&
	*/
	SimpleFactory& operator=(const SimpleFactory& cSimpleFactory);

public:
protected:
private:
	static SimpleFactory* m_pInstance;
};
#endif	/* >>CXX_DESIGNPATTERN_SIMPLEFACTORY_H<< */
/* EOF */